/**
 * @description 对象
 * @author 张航
 * @date 2020-03-18 12:28:17
 * @version V1.0.0
 */

/**
 * @functionName  hasKey
 * @param {Object} obj 检测的对象
 * @param {String} key 检测的key
 * @return {*|String|Number|Boolean|Array|Object} 返回结果
 * @description 判断一个对象是否存在key，如果传入第二个参数key，则是判断这个obj对象是否存在key这个属性
 *              如果没有传入key这个参数，则判断obj对象是否有键值对
 * @author 张航
 * @date 2020-03-18 12:43:58
 * @version V1.0.0
 */
export const hasKey = (obj = {}, key = '') => {
  if (key) return key in obj
  else {
    const keysArr = Object.keys(obj)
    return keysArr.length
  }
}

/**
 * @functionName objEqual
 * @param {*} obj1 对象
 * @param {*} obj2 对象
 * @return {Boolean} 返回结果
 * @description 判断两个对象是否相等，这两个对象的值只能是数字或字符串
 * @author 张航
 * @date 2020-03-18 12:41:01
 * @version V1.0.0
 */
export const objEqual = (obj1 = {}, obj2 = {}) => {
  const keysArr1 = Object.keys(obj1)
  const keysArr2 = Object.keys(obj2)
  if (keysArr1.length !== keysArr2.length) return false
  else if (keysArr1.length === 0 && keysArr2.length === 0) return true
  else {
    let flag = true
    keysArr1.forEach(key => {
      if (typeof obj1[key] === 'undefined' || typeof obj2[key] === 'undefined') {
        if (typeof obj1[key] !== 'undefined' || typeof obj2[key] !== 'undefined') {
          flag = false
          return false
        }
      } else if (Array.isArray(obj1[key]) || Array.isArray(obj2[key])) {
        if (obj1[key].toString() !== obj2[key].toString()) {
          flag = false
          return false
        }
      } else {
        if (obj1[key] !== obj2[key]) {
          flag = false
          return false
        }
      }
    })
    return flag
  }

  /* eslint-disable-next-line */
  /*  else return !keysArr1.some(key => {
      if (typeof obj1[key] === 'undefined' && typeof obj2[key] === 'undefined') {

      }
      return obj1[key] != obj2[key]
    })*/
}
